/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import CONTABILIDAD_MODELO.CON_DATOS_EMPRESA;
import Conexion.Conexion;
import RRHH_Modelo.RHH_DEPARTAMENTO;
import RRHH_Modelo.RHH_EVENTOS_HITO;
import RRHH_Modelo.RHH_FECHAS_HITO;
import RRHH_Modelo.RHH_PERSONA;
import RRHH_Modelo.RHH_PLANILLA_EMPLEADOS;
import RRHH_Modelo.RHH_PLANILLA_PREVISION_INDEM;
import RRHH_Modelo.RHH_PLANILLA_PREV_INDEM_CABE;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVOS;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVO_CABE;
import RRHH_Modelo.RHH_QUINQUENIO;
import RRHH_Modelo.RHH_REGIONAL;
import RRHH_Modelo.RHH_SUCURSAL;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "RRHH_PLANILLA_PREVISION_INDEM_CONTROLLER", urlPatterns = {"/RRHH_PLANILLA_PREVISION_INDEM_CONTROLLER"})
public class RRHH_PLANILLA_PREVISION_INDEM_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RRHH_PLANILLA_FINIQUITOS_CONTROLLER</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet RRHH_PLANILLA_FINIQUITOS_CONTROLLER at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            RHH_USUARIO usuario = ((RHH_USUARIO) request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String evento = request.getParameter("evento");
            String html = "";

            switch (evento) {
                case "cargar":
                    html = cargar(request, con);
                    break;
                case "estado":
                    html = estado(request, con);
                    break;
                case "mostrar":
                    html = mostrar(request, con);
                    break;
                case "cerrar":
                    html = cerrar(request, con);
                    break;
                case "calcular_fila":
                    html = calcular_fila(request, con);
                    break;                
            }
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            con.Close();
        } catch (SQLException ex) {
            Logger.getLogger(RRHH_PLANILLA_PREVISION_INDEM_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String cargar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        String html = "";
        
        RHH_PLANILLA_PREV_INDEM_CABE cabe = new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);        
        int id_cabecera=0;
        if(cabe!=null)
        {
            id_cabecera = cabe.getID();
            new RHH_PLANILLA_PREVISION_INDEM(con).Eliminar(id_cabecera);
        }
        else
        {
            cabe =new RHH_PLANILLA_PREV_INDEM_CABE(0, ano, mes, 1);
            cabe.setCon(con);
            id_cabecera = cabe.Insertar();
        }
        
        html += "<thead>";
        html += "<tr>";
        html += "<th rowspan='2'>CI</th>";
        html += "<th rowspan='2'>LUGAR DE EMISION</th>";
        html += "<th rowspan='2'>NOMBRES</th>";
        html += "<th rowspan='2'>APELLIDO PATERNO</th>";
        html += "<th rowspan='2'>APELLIDO MATERNO</th>";
        html += "<th rowspan='2'>FECHA CONTRATACION</th>";
        html += "<th rowspan='2'>FECHA RETIRO</th>";
        html += "<th colspan='3'>ANTIGUEDAD</th>";
        html += "<th rowspan='2'>CARGO</th>";
        html += "<th rowspan='2'>DEPARTAMENTO</th>";
        html += "<th rowspan='2'>REGIONAL</th>";
        html += "<th rowspan='2'>SUCURSAL</th>";        
        html += "<th rowspan='2'>SALARIO MES 1</th>";
        html += "<th rowspan='2'>SALARIO MES 2</th>";
        html += "<th rowspan='2'>SALARIO MES 3</th>";
        html += "<th rowspan='2'>TOTAL</th>";
        html += "<th rowspan='2'>PROMEDIO 3 SALARIOS</th>";
        html += "<th rowspan='2'>CANTIDAD QUINQUENIOS PAGADOS</th>";
        html += "<th rowspan='2'>MONTO TOTAL INDEMNIZACION</th>";
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR MENSUAL</th>";
        html += "<th rowspan='2'>MONTO RETROACTIVO</th>";        
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR RETROACTIVO</th>";
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR MENSUAL + RETROACTIVO</th>";
        html += "</tr>";
        html += "<tr>";
        html += "<th>DIA</th>";
        html += "<th>MES</th>";
        html += "<th>AÑO</th>";
        html += "</tr>";
        html += "</thead>";
        html += "<tbody>";
        List<RHH_USUARIO> lista = new RHH_USUARIO(con).Todos_Activos_Incluyendo_Despedidos_Este_Mes(ano, mes);
        for (RHH_USUARIO usr : lista) {
            String consulta = "SELECT RHH_PERSONA.CI,\n"
                    + "       RHH_PERSONA.LUGAR_EMISION,\n"
                    + "       RHH_PERSONA.PRIMER_NOMBRE,\n"
                    + "       RHH_PERSONA.SEGUNDO_NOMBRE,\n"
                    + "       RHH_PERSONA.PRIMER_APELLIDO,\n"
                    + "       RHH_PERSONA.SEGUNDO_APELLIDO,\n"
                    + "       RHH_DEPARTAMENTO.ID AS DEPTO,\n"
                    + "       RHH_REGIONAL.ID AS REGIONAL,\n"
                    + "       RHH_SUCURSAL.ID AS SUCURSAL,\n"
                    + "       RHH_CARGO.DESCRIPCION AS CARGO,\n"
                    + "       RHH_USUARIO.ID\n"
                    + "  FROM BROKER.RHH_USUARIO,\n"
                    + "       BROKER.RHH_CARGO,\n"
                    + "       BROKER.RHH_CARGO_DEP_REG_SUC,\n"
                    + "       BROKER.RHH_DEPARTAMENTO,\n"
                    + "       BROKER.RHH_REGIONAL,\n"
                    + "       BROKER.RHH_SUCURSAL,\n"
                    + "       BROKER.RHH_PERSONA\n"
                    + " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n"
                    + "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n"
                    + "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n"
                    + "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n"
                    + "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n"
                    + "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n"
                    + "       AND (RHH_USUARIO.ID = " + usr.getID() + ")";
            ResultSet rs = con.EjecutarConsulta(consulta);

            if (rs.next()) {
                RHH_PLANILLA_PREVISION_INDEM planilla = new RHH_PLANILLA_PREVISION_INDEM(con);
                planilla.setID_CABECERA(id_cabecera);
                
                RHH_FECHAS_HITO fecha_hito = new RHH_FECHAS_HITO(con).BuscarxUsuarioEvento(3, usr.getID());
                Date ingreso = fecha_hito.getFECHAinDate();
                RHH_FECHAS_HITO fecha_hito_despido = new RHH_FECHAS_HITO(con).retiro(usr.getID());
                Date despido = null;
                if(fecha_hito_despido!=null)
                    despido=fecha_hito_despido.getFECHAinDate();
                
                
                Calendar calendario = new GregorianCalendar();
                calendario.set(Calendar.YEAR, 0);
                calendario.set(Calendar.MONTH, 0);
                calendario.set(Calendar.DAY_OF_MONTH, 1);

                Calendar fecha_actual = new GregorianCalendar();                
                if(despido!=null)
                    fecha_actual.setTime(despido);
                else
                {
                   fecha_actual.set(Calendar.YEAR, ano);
                   fecha_actual.set(Calendar.MONTH, mes);                   
                }
                
                int anof = 0;
                int mesf = 0;
                int diaf = 0;

                int dias_trabajados = 0;
                if (ingreso != null) {
                    Date fecha1 = ingreso;                                      
                    Date fecha2 = fecha_actual.getTime();
                    long diferencia = fecha2.getTime() - fecha1.getTime();
                    int dia = (int) (diferencia / (3600000 * 24));
                    dias_trabajados = dia;
                    calendario.add(Calendar.DAY_OF_MONTH, dia);
                    if (dia < 365) {
                        anof = 0;
                    } else {
                        anof = calendario.get(Calendar.YEAR);
                    }

                    mesf = calendario.get(Calendar.MONTH);
                    diaf = calendario.get(Calendar.DAY_OF_MONTH);
                }
                

                if (dias_trabajados >= 90) {
                    planilla.setID_USUARIO(usr.getID());
                    html += "<tr>";
                    html += "<td>" + rs.getString("CI") + "</td>";
                    html += "<td>" + rs.getString("LUGAR_EMISION") + "</td>";
                    String primer_nombre = rs.getString("PRIMER_NOMBRE");
                    String segundo_nombre = rs.getString("SEGUNDO_NOMBRE");
                    primer_nombre = primer_nombre == null ? "" : primer_nombre;
                    segundo_nombre = segundo_nombre == null ? "" : segundo_nombre;
                    html += "<td>" + primer_nombre + " " + segundo_nombre + "</td>";
                    String primer_apellido = rs.getString("PRIMER_APELLIDO");
                    primer_apellido = primer_apellido == null ? "" : primer_apellido;
                    html += "<td>" + primer_apellido + "</td>";
                    String segundo_apellido = rs.getString("SEGUNDO_APELLIDO");
                    segundo_apellido = segundo_apellido == null ? "" : segundo_apellido;
                    html += "<td>" + segundo_apellido + "</td>";

                    if (fecha_hito != null) {
                        html += "<td>" + fecha_hito.getFECHA() + "</td>";
                        planilla.setFECHA_CONTRATACION(ingreso);
                    } else {
                        html += "<td></td>";
                    }             
                    if (despido != null) {
                        html += "<td>" + fecha_hito_despido.getFECHA() + "</td>";
                        planilla.setFECHA_CONTRATACION(despido);
                    } else {
                        html += "<td></td>";
                    }             

                    html += "<td>" + diaf + "</td>";
                    planilla.setANTIGUEDAD_DIA(diaf);
                    html += "<td>" + mesf + "</td>";
                    planilla.setANTIGUEDAD_MES(mesf);
                    html += "<td>" + anof + "</td>";
                    planilla.setANTIGUEDAD_ANO(anof);

                    String cargo = rs.getString("CARGO");
                    cargo = cargo == null ? "" : cargo;
                    html += "<td>" + cargo + "</td>";
                    planilla.setCARGO(cargo);
                    
                    int id_depto = rs.getInt("DEPTO");
                    String depto = "***";                        
                    if(id_depto!=0)
                    {
                        RHH_DEPARTAMENTO de = new RHH_DEPARTAMENTO(con).BuscarXid(id_depto);
                        if(de!=null)
                            depto = de.getDESCRIPCION();                        
                        html += "<td>" + depto + "</td>";
                        planilla.setDEPARTAMENTO(id_depto);
                    }
                    else
                        html += "<td>***</td>";

                    int id_regional = rs.getInt("REGIONAL");
                    String regional="***";
                    if(id_regional!=0)
                    {
                        RHH_REGIONAL reg = new RHH_REGIONAL(con).BuscarXid(id_regional);
                        if(reg!=null)
                            regional = reg.getDESCRIPCION();

                        html += "<td>" + regional + "</td>";
                        planilla.setREGIONAL(id_regional);
                    }
                    else
                        html += "<td>***</td>";

                    int id_sucursal = rs.getInt("SUCURSAL");
                    String sucursal="***";
                    if(id_sucursal!=0)
                    {
                        RHH_SUCURSAL suc = new RHH_SUCURSAL(con).BuscarXid(id_sucursal);
                        if(suc!=null)
                            sucursal=suc.getDESCRIPCION();

                        html += "<td>" + sucursal + "</td>";
                        planilla.setSUCURSAL(id_sucursal);   
                    }
                    else
                        html += "<td>***</td>";

                   
                    Calendar fecha_planilla = new GregorianCalendar();
                    fecha_planilla.set(Calendar.YEAR, ano);
                    fecha_planilla.set(Calendar.MONTH, mes);

                    fecha_planilla.add(Calendar.MONTH, -3);

                    double salario1 = 0.0;
                    double salario2 = 0.0;
                    double salario3 = 0.0;

                    RHH_PLANILLA_EMPLEADOS planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), (fecha_planilla.get(Calendar.MONTH)+1), usr.getID());

                    if (planilla_empleados != null) {
                        salario1 = planilla_empleados.getTOTAL_GANADO();
                    }

                    fecha_planilla.add(Calendar.MONTH, 1);
                    planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), fecha_planilla.get(Calendar.MONTH)+1, usr.getID());

                    if (planilla_empleados != null) {
                        salario2 = planilla_empleados.getTOTAL_GANADO();
                    }

                    fecha_planilla.add(Calendar.MONTH, 1);
                    planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), fecha_planilla.get(Calendar.MONTH)+1, usr.getID());

                    if (planilla_empleados != null) {
                        salario3 = planilla_empleados.getTOTAL_GANADO();
                    }

                    html += "<td>" + salario1 + "</td>";
                    planilla.setSALARIO_MES_1(salario1);
                    html += "<td>" + salario2 + "</td>";
                    planilla.setSALARIO_MES_2(salario2);
                    html += "<td>" + salario3 + "</td>";
                    planilla.setSALARIO_MES_3(salario3);
                    double total = (salario3 + salario2 + salario1);
                    html += "<td>" + (total) + "</td>";
                    planilla.setTOTAL(total);
                    double promedio = total / 3;
                    html += "<td>" + (promedio) + "</td>";
                    planilla.setPROMEDIO_SALARIOS(promedio);

                   
                    int cantidad_quinquenios = new RHH_QUINQUENIO(con).BuscarPagadosxUsuario(planilla.getID_USUARIO());
                    html+="<td>"+cantidad_quinquenios+"</td>";                    
                    planilla.setQUINQUENIOS_COBRADOS(cantidad_quinquenios);                                        
                    
                    double ano_comercial = new CON_DATOS_EMPRESA(con).Buscar().getANO_COMERCIAL();
                    
                    double por_ano = (anof-(5*cantidad_quinquenios))*promedio;
                    double por_mes = mesf*(promedio/12);
                    double por_dia = diaf*(promedio/ano_comercial);
                    double total_indemnizar = por_ano+por_mes+por_dia;                    
                    html += "<td>" + total_indemnizar + "</td>";
                    planilla.setTOTAL_MONTO_INDEMNIZAR(total_indemnizar);
                    
                    double monto_a_previsionar=(total_indemnizar/dias_trabajados)*fecha_actual.getActualMaximum(Calendar.DAY_OF_MONTH);                    
                    html += "<td>" + monto_a_previsionar + "</td>";
                    planilla.setMONTO_PREVISIONAR(monto_a_previsionar);
                    
                    double monto_retro_activo = 0.0;
                    int id_cabe=0;
                    RHH_PLANILLA_RETROACTIVO_CABE cabe1 = new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano, mes);
                    if(cabe1!=null)
                        id_cabe=cabe1.getID();
                    
                    RHH_PLANILLA_RETROACTIVOS retro = new RHH_PLANILLA_RETROACTIVOS(con).Buscar(id_cabe, usr.getID());

                    if (retro != null) {
                        double total_ganado = retro.getTOTAL_GANADO();
                        double dias_trabajados_retroactivo = retro.getDIAS_TRABAJADOS();
                        monto_retro_activo = ((total_ganado * dias_trabajados_retroactivo) / ano_comercial) / 3;
                    }                    
                    
                    html += "<td><input type='number' value='" + monto_retro_activo + "' onblur='calcular_fila(this," + mes + "," + ano + "," + usr.getID() + ");' /></td>";
                    planilla.setMONTO_RETROACTIVO(monto_retro_activo);                                        
                    
                    int dias_retro=0;
                    if(retro!=null)
                    {
                        dias_retro=retro.getDIAS_DE_RETROACTIVO();
                    }
                    
                    anof = (int) (dias_retro/ano_comercial);
                    dias_retro=(int)(dias_retro%ano_comercial);
                    mesf = (int) (dias_retro/30);
                    dias_retro=(int)(dias_retro%30);
                    diaf =dias_retro;
                    
                    por_ano = anof*monto_retro_activo;
                    por_mes = mesf*(monto_retro_activo/12);
                    por_dia = diaf*(monto_retro_activo/ano_comercial);
                    double total_indemnizar_retro = por_ano+por_mes+por_dia;                    
                    html+="<td>"+total_indemnizar_retro+"</td>";
                    planilla.setTOTAL_MONTO_INDEMNIZAR_RETRO(total_indemnizar_retro);
                    
                    double prov_mas_retro = monto_a_previsionar+total_indemnizar_retro;                    
                    html+="<td>"+prov_mas_retro+"</td>";
                    planilla.setTOTAL_MONTO_INDEMNIZAR_MAS_RET(prov_mas_retro);
                    planilla.Insertar();
                    html += "</tr>";
                }
            }
        }
        html += "</tbody>";        
        return html;

    }

    private String calcular_fila(HttpServletRequest request, Conexion con) throws SQLException {
        int id_usr = Integer.parseInt(request.getParameter("id_usr"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        double monto_retro = Double.parseDouble(request.getParameter("monto_retro"));
        String html = "";

        RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(id_usr);
        List<RHH_EVENTOS_HITO> evento_list = new RHH_EVENTOS_HITO(con).TodosRetiro();
        RHH_PLANILLA_PREV_INDEM_CABE cabe = new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);
        
        RHH_PLANILLA_PREVISION_INDEM planilla = null;
        if(cabe!=null)
            planilla = new RHH_PLANILLA_PREVISION_INDEM(con).Buscar(cabe.getID(), id_usr);
        
        if (planilla != null) {
            html += "<td>" + per.getCI() + "</td>";
            html += "<td>" + per.getLUGAR_EMISION() + "</td>";
            html += "<td>" + per.getPRIMER_NOMBRE() + " " + per.getSEGUNDO_NOMBRE() + "</td>";
            html += "<td>" + per.getPRIMER_APELLIDO() + "</td>";
            html += "<td>" + per.getSEGUNDO_APELLIDO() + "</td>";
            html += "<td>" + planilla.getFECHA_CONTRATACION()+ "</td>";
            if (planilla.getFECHA_RETIRO() != null) {
                html += "<td>" + planilla.getFECHA_RETIRO() + "</td>";
            } else {
                html += "<td></td>";
            }
            html += "<td>" + planilla.getANTIGUEDAD_DIA() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_MES() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_ANO() + "</td>";
            
            String cargo = planilla.getCARGO();
            cargo = cargo == null ? "" : cargo;
            html += "<td>" + cargo + "</td>";
            
            
            int id_depto = planilla.getDEPARTAMENTO();
            int id_reg = planilla.getREGIONAL();
            int id_suc = planilla.getSUCURSAL();
            RHH_DEPARTAMENTO depto = new RHH_DEPARTAMENTO(con).BuscarXid(id_depto);
            RHH_REGIONAL reg = new RHH_REGIONAL(con).BuscarXid(id_reg);
            RHH_SUCURSAL suc = new RHH_SUCURSAL(con).BuscarXid(id_suc);
            if(depto!=null)
                html += "<td>" + depto.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            if(reg!=null)
                html += "<td>" + reg.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            if(suc!=null)
                html += "<td>" + suc.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            html += "<td>" + planilla.getSALARIO_MES_1() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_2() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_3() + "</td>";
            html += "<td>" + planilla.getTOTAL() + "</td>";
            html += "<td>" + planilla.getPROMEDIO_SALARIOS() + "</td>";
            html += "<td>" + planilla.getQUINQUENIOS_COBRADOS() + "</td>";
            html += "<td>" + planilla.getTOTAL_MONTO_INDEMNIZAR()+ "</td>";
            html += "<td>" + planilla.getMONTO_PREVISIONAR()+ "</td>";
            
            planilla.setMONTO_RETROACTIVO(monto_retro);            
            html += "<td><input type='number' value='" + monto_retro + "' onblur='calcular_fila(this," + mes + "," + ano + "," + planilla.getID_USUARIO()+ ");' /></td>";
            int dias_retro=0;
            int id_cabe=0;
            RHH_PLANILLA_RETROACTIVO_CABE cabe1 = new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano,mes);
            if(cabe1!=null)
                id_cabe=cabe1.getID();
            RHH_PLANILLA_RETROACTIVOS retro = new RHH_PLANILLA_RETROACTIVOS(con).Buscar(id_cabe, planilla.getID_USUARIO());
            if(retro!=null)
            {
                dias_retro=retro.getDIAS_DE_RETROACTIVO();
            }
            
            double ano_comercial = new CON_DATOS_EMPRESA(con).Buscar().getANO_COMERCIAL();
            
            int anof = (int) (dias_retro/ano_comercial);
            dias_retro=(int)(dias_retro%ano_comercial);
            int mesf = (int) (dias_retro/30);
            dias_retro=(int)(dias_retro%30);
            int diaf =dias_retro;

            double por_ano = anof*monto_retro;
            double por_mes = mesf*(monto_retro/12);
            double por_dia = diaf*(monto_retro/ano_comercial);
            double total_indemnizar_retro = por_ano+por_mes+por_dia;                                
            html+="<td>"+total_indemnizar_retro+"</td>";
            planilla.setTOTAL_MONTO_INDEMNIZAR_RETRO(total_indemnizar_retro);

            double prov_mas_retro = planilla.getMONTO_PREVISIONAR()+total_indemnizar_retro;                    
            html+="<td>"+prov_mas_retro+"</td>";
            planilla.setTOTAL_MONTO_INDEMNIZAR_MAS_RET(prov_mas_retro);                    
            planilla.Modificar();
        }
        return html;
    }

    private String mostrar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        
        RHH_PLANILLA_PREV_INDEM_CABE cabe = new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);
        
        List<RHH_PLANILLA_PREVISION_INDEM> lista = new ArrayList<>();
        if(cabe!=null)
            lista=new RHH_PLANILLA_PREVISION_INDEM(con).Buscar(cabe.getID());
        
        String html = "";
        html += "<thead>";
        html += "<tr>";
        html += "<th rowspan='2'>CI</th>";
        html += "<th rowspan='2'>LUGAR DE EMISION</th>";
        html += "<th rowspan='2'>NOMBRES</th>";
        html += "<th rowspan='2'>APELLIDO PATERNO</th>";
        html += "<th rowspan='2'>APELLIDO MATERNO</th>";
        html += "<th rowspan='2'>FECHA CONTRATACION</th>";
        html += "<th rowspan='2'>FECHA RETIRO</th>";
        html += "<th colspan='3'>ANTIGUEDAD</th>";
        html += "<th rowspan='2'>CARGO</th>";
        html += "<th rowspan='2'>DEPARTAMENTO</th>";
        html += "<th rowspan='2'>REGIONAL</th>";
        html += "<th rowspan='2'>SUCURSAL</th>";        
        html += "<th rowspan='2'>SALARIO MES 1</th>";
        html += "<th rowspan='2'>SALARIO MES 2</th>";
        html += "<th rowspan='2'>SALARIO MES 3</th>";
        html += "<th rowspan='2'>TOTAL</th>";
        html += "<th rowspan='2'>PROMEDIO 3 SALARIOS</th>";
        html += "<th rowspan='2'>CANTIDAD QUINQUENIOS PAGADOS</th>";
        html += "<th rowspan='2'>MONTO TOTAL INDEMNIZACION</th>";
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR MENSUAL</th>";
        html += "<th rowspan='2'>MONTO RETROACTIVO</th>";        
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR RETROACTIVO</th>";
        html += "<th rowspan='2'>TOTAL MONTO A PREVISIONAR MENSUAL + RETROACTIVO</th>";
        html += "</tr>";
        html += "<tr>";
        html += "<th>DIA</th>";
        html += "<th>MES</th>";
        html += "<th>AÑO</th>";
        html += "</tr>";
        html += "</thead>";
        html += "<tbody>";
        for (RHH_PLANILLA_PREVISION_INDEM planilla : lista) {
            RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(planilla.getID_USUARIO());
            List<RHH_EVENTOS_HITO> evento_list = new RHH_EVENTOS_HITO(con).TodosRetiro();
            html += "<tr>";
            html += "<td>" + per.getCI() + "</td>";
            html += "<td>" + per.getLUGAR_EMISION() + "</td>";
            html += "<td>" + per.getPRIMER_NOMBRE() + " " + per.getSEGUNDO_NOMBRE() + "</td>";
            html += "<td>" + per.getPRIMER_APELLIDO() + "</td>";
            html += "<td>" + per.getSEGUNDO_APELLIDO() + "</td>";
            html += "<td>" + planilla.getFECHA_CONTRATACION()+ "</td>";
            if (planilla.getFECHA_RETIRO() != null) {
                html += "<td>" + planilla.getFECHA_RETIRO() + "</td>";
            } else {
                html += "<td></td>";
            }
            html += "<td>" + planilla.getANTIGUEDAD_DIA() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_MES() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_ANO() + "</td>";
            
            String cargo = planilla.getCARGO();
            cargo = cargo == null ? "" : cargo;
            html += "<td>" + cargo + "</td>";
            int id_depto = planilla.getDEPARTAMENTO();
            int id_reg = planilla.getREGIONAL();
            int id_suc = planilla.getSUCURSAL();
            RHH_DEPARTAMENTO depto = new RHH_DEPARTAMENTO(con).BuscarXid(id_depto);
            RHH_REGIONAL reg = new RHH_REGIONAL(con).BuscarXid(id_reg);
            RHH_SUCURSAL suc = new RHH_SUCURSAL(con).BuscarXid(id_suc);
            if(depto!=null)
                html += "<td>" + depto.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            if(reg!=null)
                html += "<td>" + reg.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            if(suc!=null)
                html += "<td>" + suc.getDESCRIPCION() + "</td>";
            else
                html += "<td></td>";
            
            html += "<td>" + planilla.getSALARIO_MES_1() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_2() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_3() + "</td>";
            html += "<td>" + planilla.getTOTAL() + "</td>";
            html += "<td>" + planilla.getPROMEDIO_SALARIOS() + "</td>";
            html += "<td>" + planilla.getQUINQUENIOS_COBRADOS() + "</td>";
            html += "<td>" + planilla.getTOTAL_MONTO_INDEMNIZAR()+ "</td>";
            html += "<td>" + planilla.getMONTO_PREVISIONAR()+ "</td>";
            html += "<td>" + planilla.getMONTO_RETROACTIVO() + "</td>";
            html += "<td>" + planilla.getTOTAL_MONTO_INDEMNIZAR_RETRO() + "</td>";
            html += "<td>" + planilla.getTOTAL_MONTO_INDEMNIZAR_MAS_RET() + "</td>";
            
            html += "</tr>";
        }
        html += "</tbody>";
        return html;
    }

    private String estado(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        RHH_PLANILLA_PREV_INDEM_CABE planilla = new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);
        if (planilla!=null) 
        {
            return planilla.getESTADO() + "";
        } else {
            return "-1";
        }
    }

    private String cerrar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        RHH_PLANILLA_PREV_INDEM_CABE cabe = new RHH_PLANILLA_PREV_INDEM_CABE(con).Buscar(ano, mes);
        cabe.setESTADO(0);
        cabe.Modificar();
        return "true";
    }   
}
